package cn.skywalks.common.utils;

import com.sun.org.apache.xpath.internal.functions.FuncFalse;

/**
 * Created by lpeng on 2017/7/11.
 */
public class StringUtil {

    /**
     * 失败的索引搜索
     */
    public static final int INDEX_NOT_FOUND = -1;

    public static final String EMPTY = "";

    /**
     * 判断字符串是否为空
     *
     * @param str
     * @return
     */
    public static boolean isEmpty(String str) {
        return str == null || str.length() == 0;
    }

    /**
     * 判断字符串是否不为空
     *
     * @param str
     * @return
     */
    public static boolean isNotEmpty(String str) {
        return !StringUtil.isEmpty(str);
    }

    /**
     * 判断字符串是否为空白
     *
     * @param str
     * @return
     */
    public static boolean isBlank(String str){
        int strLen;
        if (null == str || (strLen = str.length()) == 0){
            return true;
        }
        for (int i = 0; i < strLen; i++){
            if (!Character.isWhitespace(str.charAt(i))){
                return false;
            }
        }
        return true;
    }

    /**
     * 判断一个字符串是否为空 ("")
     *
     * @param str
     * @return
     */
    public static boolean isNotBlank(String str){
        return !isBlank(str);
    }

    /**
     * trim 如果为null返回null，不为null trim
     *
     * @param str
     * @return
     */
    public static String trim(String str) {
        return str == null ? null : str.trim();
    }

    /**
     * 判断两个字符串是否相等，可用来判断null
     *
     * @param str1
     * @param str2
     * @return boolean
     */
    public static boolean equals(String str1, String str2) {
        return str1 == null ? str2 == null : str1.equals(str2);
    }

    /**
     * 判断两个字符串是否相等忽略大小写，可用来判断null
     *
     * @param str1
     * @param str2
     * @return
     */
    public static boolean equalsIgnoreCase(String str1, String str2){
        return str1 == null ? str2 == null : str1.equalsIgnoreCase(str2);
    }

    /**
     * 在字符串中查找指定字符的索引
     *
     * @param str
     * @param searchChar 指定字符
     * @return index 索引
     */
    public static int indexOf(String str, char searchChar){
        if (isEmpty(str)){
            return INDEX_NOT_FOUND;
        }
        return str.indexOf(searchChar);
    }

    /**
     * 在字符串中从指定的索引之后查找指定字符的索引
     *
     * @param str
     * @param searchChar 指定字符
     * @param startPos  开始的索引
     * @return
     */
    public static int indexOf(String str, char searchChar, int startPos) {
        if (isEmpty(str)) {
            return INDEX_NOT_FOUND;
        }
        return str.indexOf(searchChar, startPos);
    }

    /**
     * 在字符串中查找指定字符串的索引
     *
     * @param str
     * @param searchChar
     * @return
     */
    public static int indexOf(String str, String searchChar){
        if (isEmpty(str) || isEmpty(searchChar)){
            return INDEX_NOT_FOUND;
        }
        return str.indexOf(searchChar);
    }

    /**
     * 从字符串的末尾查找指定字符的索引
     *
     * @param str
     * @param searchChar
     * @return
     */
    public static int lastIndexOf(String str, char searchChar){
        if (isEmpty(str)) {
            return INDEX_NOT_FOUND;
        }
        return str.lastIndexOf(searchChar);
    }

    /**
     * 从字符串的末尾查找指定字符串的索引
     *
     * @param str
     * @param searchStr
     * @return
     */
    public static int lastIndexOf(String str, String searchStr){
        if (isEmpty(str) || isEmpty(searchStr)){
            return INDEX_NOT_FOUND;
        }
        return str.lastIndexOf(searchStr);
    }

    /**
     * 在字符串中从指定的索引之前查找指定字符的索引
     *
     * @param str
     * @param searchStr
     * @param startPos
     * @return
     */
    public static int lastIndexOf(String str, String searchStr, int startPos){
        if (isEmpty(str) || isEmpty(searchStr)){
            return INDEX_NOT_FOUND;
        }
        return str.lastIndexOf(searchStr, startPos);
    }

    /**
     * 截取字符串 (-1 截取末尾最后一位字符)
     *
     * @param str
     * @param start
     * @return
     */
    public static String substring(String str, int start){
        if (str == null) return null;

        if (start < 0) start = str.length() + start;

        if (start < 0) start = 0;

        if (start > str.length()) return EMPTY;

        return str.substring(start);
    }

    /**
     * 截取字符串从开始到结束 (-1 截取末尾最后一位字符)
     *
     * @param str
     * @param start
     * @param end
     * @return
     */
    public static String substring(String str, int start, int end){
        if (str == null) return null;

        if (end < 0) end = str.length() + end;

        if (start < 0) start = str.length() + start;

        if (start > end) return EMPTY;

        if (start < 0) start = 0;
        if (end < 0) end = 0;

        return str.substring(start, end);
    }

}
